import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { removeToken } from './auth'
import router from '@/router'
const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 100000
})

// 添加请求拦截器
request.interceptors.request.use(function(config) {
  // 在发送请求之前做些什么
  const token = store.getters.token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, function(error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function(response) {
// ❤️因为当时做判断正确与失败是基于后台响应success，是json格式的判断
// 但是我们拿二进制做的判断与json格式不一致，因此要多做一步判断，返回的数据是blob的，所以用instanceof判断数据是否在blob的原型上
  if (response.data instanceof Blob) return response.data // data就直接是二进制的数据，直接放在saveAs里面即可

  // 后台返回数据不一定是状态码2开头就返回成功数据，看后台接口响应数据
  if (response.data.success) {
    return response.data
  } else {
    // 如果想响应状态是错误的，那么就直接抛出错误
    Message.error(response.data.message)
    return Promise.reject(response.data.message)
  }
}, function(error) {
  if (error.response.status === 401) {
    Message.warning('登陆过期，请重新登录')
    removeToken()
    // vuex仓库的token也要清除，调用mutation方法赋值为''
    store.commit('user/saveToken', '')
    router.push('/login')
  } else {
    Message.error(error.response.message)
  }
  return Promise.reject(error)
})
export default request
